//038. 全数字乘积 II
//        用数字 192 分别乘以 1，2，3 可以得到：
//        192×1=192
//        192×2=384
//        192×3=576
//        把每个乘积前后相接，我们可以得到一个全数字 192384576。我们把 192384576 称为 192 和
//        (1,2,3)的拼接乘积。
//        类似的，我们可以用数字 9 乘以 1，2，3，4 和 5 得到全数字 918273645，它是 9 和(1,2,3,4,5)
//        的拼接乘积。
//        求用一个整数和(1,2,3⋯,n)形成的拼接乘积中最大的全数字，其中 n>1。
//        答案：932718654

//n>1表示最少要乘到2
//两个数拼接而成的9位数->必然小于10000
public class Week038 {

    static boolean[] flag = new boolean[10];

    static boolean get(StringBuilder ans, int x) {
        ans.append(x);
        for (int i = 2; ans.length() < 9; ++i) {
            ans.append(x * i);
        }
        if (ans.length() != 9) return false;
        for (int i = 1; i < 10; ++i) {
            flag[i] = false;
        }
        for (int i = 0; i < 9; ++i) {
            int idx = ans.charAt(i) - '0';
            if (flag[idx]) {
                return false;
            }
            flag[idx] = true;
        }
        return true;
    }

    static void run() {
        StringBuilder ans = new StringBuilder();
        StringBuilder t = new StringBuilder();
        for (int i = 1; i < 10000; ++i) {
            if (t.length() != 0) {
                t.delete(0, t.length());
            }
            boolean yes = get(t, i);
            if (yes && ans.compareTo(t) < 0) {
                ans = new StringBuilder(t);//一定要写new 不然就是引用赋值，导致对t进行更改使ans也变化
            }
        }
        System.out.println(ans);
    }

    public static void main(String[] args) {
        long startTime = System.nanoTime();
        run();
        System.out.println("\n程序运行时间：" + (System.nanoTime() - startTime) + "ns.");
    }
}
